package com.grupobbva.seguridad.service;

import java.util.List;

import com.grupobbva.seguridad.domain.Aplicacion;
import com.grupobbva.seguridad.domain.Control;
import com.grupobbva.seguridad.domain.Empresa;
import com.grupobbva.seguridad.domain.EmpresaAcceso;
import com.grupobbva.seguridad.domain.IngresoUsuario;
import com.grupobbva.seguridad.domain.Opcion;
import com.grupobbva.seguridad.domain.OpcionImagen;
import com.grupobbva.seguridad.domain.OpcionPK;
import com.grupobbva.seguridad.domain.Perfil;
import com.grupobbva.seguridad.domain.PerfilEmpresa;
import com.grupobbva.seguridad.domain.PerfilPK;
import com.grupobbva.seguridad.domain.PerfilUsuario;
import com.grupobbva.seguridad.domain.TipoOficinaEmpresa;
import com.grupobbva.seguridad.domain.UbicacionEmpresa;
import com.grupobbva.seguridad.domain.Usuario;
import com.grupobbva.seguridad.domain.Restriccion;
import com.grupobbva.seguridad.webservice.domain.UsuarioPerfil;

public interface SeguridadService {
	
	public Usuario validarUsuario(Long aplicacionId, String usuarioId, String clave) throws Exception;
	public Usuario validarUsuario(String contextoAplicacion, String usuarioId) throws Exception;
	
	public List<UsuarioPerfil> obtenerUsuariosAplicacion(String contextoAplicacion) throws Exception;

	public IngresoUsuario registrarIngresoUsuario(Usuario usuario) throws Exception;
	public IngresoUsuario registrarSalidaUsuario(Usuario usuario) throws Exception;
	
	public List<Aplicacion> obtenerAplicaciones(Aplicacion aplicacion, List<Long> accesoAplicacionIds) throws Exception;
	public String obtenerAplicacionScript(Long tipoGeneracionId, Long aplicacionId, Long aplicacionIdReemplazo) throws Exception;
	public Aplicacion obtenerAplicacion(long aplicacionId) throws Exception;
	public Aplicacion registrarAplicacion(Aplicacion aplicacion, Usuario usuario) throws Exception;
	public Aplicacion eliminarAplicacion(Aplicacion aplicacion) throws Exception;
	
	public List<Opcion> obtenerOpcionesNivelSuperior(OpcionPK opcionId) throws Exception;
	public Integer obtenerOpcionesNivelInferiorCantidad(OpcionPK opcionPK) throws Exception;
	public List<Opcion> obtenerOpciones(Opcion opcion) throws Exception;
	public OpcionImagen obtenerOpcionImagen(OpcionPK opcionPK) throws Exception;
	public Opcion obtenerOpcion(OpcionPK opcionPK) throws Exception;
	public OpcionImagen registrarOpcion(OpcionImagen opcion) throws Exception;
	public Opcion registrarOpcion(Opcion opcion) throws Exception;
	public Opcion eliminarOpcion(Opcion opcion) throws Exception;

	public Control registrarControl(Control control, Usuario usuario) throws Exception;
	public Control eliminarControl(Control control) throws Exception;
	public List<Control> obtenerControles(Control control) throws Exception;
	
	public List<Perfil> obtenerPerfiles(Perfil perfil) throws Exception;
	public List<Perfil> obtenerPerfiles(String contexto) throws Exception;
	public Perfil obtenerPerfil(PerfilPK perfilId) throws Exception;
	public Perfil copiarPerfil(Perfil perfil, Usuario usuario) throws Exception;
	public Perfil registrarPerfil(Perfil perfil, Usuario usuario) throws Exception;
	public Perfil registrarPerfilOpciones(Perfil perfil, Usuario usuario) throws Exception;
	public Perfil eliminarPerfil(Perfil perfil) throws Exception;

	public String obtenerNombreAmbitoPorCodigo(long ambitoId, String codigo, String empresa) throws Exception;
	public PerfilUsuario obtenerPerfilUsuario(Long id) throws Exception;
	public PerfilEmpresa obtenerPerfilEmpresa(Long id) throws Exception;
	
	
	
	public PerfilUsuario registrarPerfilUsuario(PerfilUsuario perfilUsuario, Usuario usuario) throws Exception;
//	public PerfilUsuario eliminarPerfilUsuario(PerfilUsuario perfilUsuario) throws Exception;
	public PerfilEmpresa eliminarPerfilEmpresa(PerfilEmpresa perfilEmpresa) throws Exception;
	public List<PerfilUsuario> obtenerPerfilEmpresas(PerfilEmpresa perfilEmpresa, List<Long> accesoAplicacionIds) throws Exception;
//	public List<PerfilUsuario> obtenerPerfilUsuarios(PerfilUsuario perfilUsuario, List<Long> accesoAplicacionIds) throws Exception;
	public Perfil obtenerPerfilAplicacion(PerfilPK perfilPK) throws Exception;
	public List<Aplicacion> obtenerPerfilAplicaciones(long perfilId) throws Exception;
	public List<Aplicacion> obtenerPerfilAplicacionesNoAsignadas(long perfilId) throws Exception;
	public List<Opcion> obtenerPerfilAplicacionOpcionesSeleccion(PerfilPK perfilPK) throws Exception;
	public List<Control> obtenerPerfilAplicacionControlesSeleccion(PerfilPK perfilPK) throws Exception;
	public Perfil registrarAsignacionPerfilAplicacion(Perfil perfil) throws Exception;

	public Restriccion obtenerRestriccion(long restriccionId) throws Exception;
	public List<Restriccion> obtenerRestricciones(Restriccion restriccion) throws Exception;
	public Restriccion registrarRestriccion(Restriccion restriccion, Usuario usuario) throws Exception;
	public Restriccion eliminarRestriccion(Restriccion restriccion, Usuario usuario) throws Exception;
	
	public Integer obtenerIngresosCantidad(IngresoUsuario ingreso, Usuario usuario) throws Exception;
	public List<IngresoUsuario> obtenerIngresosListado(IngresoUsuario ingreso, Usuario usuario, Integer nroRegistrosPorPagina, Integer nroPaginaActual) throws Exception;
	
	
	/**
	 * Obtener empresas.
	 *
	 * @param empresaAcceso the empresa acceso
	 * @return the list
	 * @throws Exception the exception
	 * metodo nuevo creado por WBARDALEZ 18-09-2013
	 */
	public List<EmpresaAcceso> obtenerEmpresas(EmpresaAcceso empresaAcceso) throws Exception;
	
	/**
	 * Registrar empresa.
	 *
	 * @param empresaAcceso the empresa acceso
	 * @param usuario the usuario
	 * @return the empresa acceso
	 * @throws Exception the exception
	 * metodo nuevo creado por WBARDALEZ 18-09-2013
	 */
	public EmpresaAcceso registrarEmpresa(EmpresaAcceso empresaAcceso, Usuario usuario) throws Exception;
	
	/**
	 * Eliminar empresa.
	 *
	 * @param empresaAcceso the empresa acceso
	 * @return the empresa acceso
	 * @throws Exception the exception
	 * metodo nuevo creado por WBARDALEZ 18-09-2013
	 */
	public EmpresaAcceso eliminarEmpresa(EmpresaAcceso empresaAcceso) throws Exception;
	
	/**
	 * Obtener empresa por aplicacion.
	 *
	 * @param codigoAplicacion the codigo aplicacion
	 * @return the list
	 * @throws Exception the exception
	 * metodo nuevo creado por WBARDALEZ 18-09-2013
	 */
	public List<Empresa> obtenerEmpresaPorAplicacion(Long codigoAplicacion) throws Exception;
	
	/**
	 * Registrar perfil usuario.
	 *
	 * @param perfilEmpresa the perfil empresa
	 * @param usuario the usuario
	 * @return the perfil usuario
	 * @throws Exception the exception
	 * metodo nuevo creado por WBARDALEZ 22-09-2013
	 */
	public PerfilEmpresa registrarPerfilEmpresa(PerfilEmpresa perfilEmpresa, Usuario usuario) throws Exception;
	
	
	
	/**
	 * Registrar obtener Ubicaciones
	 *
	 * @throws Exception the exception
	 * metodo nuevo creado por rguerrem 29-09-2013
	 */
	public String[] obtenerUbicacionEmpresa(Long id) throws Exception;
	
	
	/**
	 * Registrar obtener tipo Oficina.
	 *
	 * @throws Exception the exception
	 * metodo nuevo creado por rguerrem 29-09-2013
	 */
	public String[] obtenerTipoOficinaEmpresa(Long id) throws Exception;
	
	/**
	 * Obtener UsuarioPerfil
	 *
	 * @throws Exception the exception
	 * metodo nuevo creado por rguerrem 29-09-2013
	 */
	public List<UsuarioPerfil> obtenerUsuariosEmpresaAplicacion(String contextoAplicacion) throws Exception;
	/**
	 * Registrar ubicacion empresa.
	 *
	 * @param lstUbicaciones the lst ubicaciones
	 * @param usuario the usuario
	 * @param perfilEmpresa the perfil empresa
	 * @return the ubicacion empresa
	 * @throws Exception the exception
	 * metodo nuevo creado por WBARDALEZ 22-09-2013
	 */
//	public UbicacionEmpresa registrarUbicacionEmpresa(String [] lstUbicaciones, Usuario usuario, PerfilEmpresa perfilEmpresa) throws Exception;
//	
	/**
	 * Registrar oficinas empresa.
	 *
	 * @param lstOficinas the lst oficinas
	 * @param usuario the usuario
	 * @param perfilEmpresa the perfil empresa
	 * @return the tipo oficina empresa
	 * @throws Exception the exception
	 * metodo nuevo creado por WBARDALEZ 22-09-2013
	 */
//	public TipoOficinaEmpresa registrarOficinasEmpresa(String [] lstOficinas, Usuario usuario, PerfilEmpresa perfilEmpresa) throws Exception;
//	
//	
}
